# ol_ath_soc_softc_t 创建流分析 ## ol_ath_soc_softc_t 创建流分析 ```c __ol_ath_attach(void *hif_hdl, struct ol_attach_t *ol_cfg, osdev_t osdev, qdf_device_t qdf_dev) { // 注意这里在为net_device分配空间的时候会额外分配ol_ath_soc_softc_t大小 // 也就是 net_device 的私有数据是 ol_ath_soc_softc_t struct net_device *dev = alloc_netdev(sizeof(struct ol_ath_soc_softc),ol_cfg->bus_type == BUS_TYPE_SIM ? "wifi-sim%d" : WIFI_DEV_NAME_SOC, soc_netdev_setup); // 正如上面所说,获取 net_device 的私有数据 即 ol_ath_soc_softc_t ol_ath_soc_softc_t *soc = ath_netdev_priv(dev); ol_if_offload_ops_attach(soc, target_type); { // 连接ops 这个ops实际就是wifi3.0.ko加载的时候 放到数组的即对应 wifi3_0_ops /* static struct ol_if_offload_ops wifi3_0_ops = { .cdp_soc_attach = &ol_if_dp_soc_attach, .cdp_soc_init = &ol_if_dp_soc_init, .dbglog_attach = &diag_event_log_attach, .dbglog_detach = &diag_event_log_detach, .update_dp_stats = &ol_update_dp_stats, }; */ soc->ol_if_ops = ol_if_offload_ops_register[OL_WIFI_3_0]; } soc->sc_osdev = osdev; // 这个是传进来的 soc->soc_attached = 0; soc->sc_osdev->netdev = dev; // 创建psoc struct wlan_objmgr_psoc * psoc = wlan_objmgr_psoc_obj_create(ol_cfg->devid, WLAN_DEV_OL); soc->psoc_obj = psoc; // 得到tgt_psoc_info的句柄 tgt_psoc_info = wlan_psoc_get_tgt_if_handle(soc->psoc_obj); //设置句柄内容 target_psoc_set_target_type(tgt_psoc_info, ol_cfg->target_type); target_psoc_set_target_rev(tgt_psoc_info, ol_cfg->target_revision); target_psoc_set_hif_hdl(tgt_psoc_info, hif_hdl); target_psoc_set_feature_ptr(tgt_psoc_info, soc); struct hif_softc *hif_scn = HIF_GET_SOFTC(hif_hdl); target_psoc_set_device_mode(tgt_psoc_info, hif_get_conparam(hif_scn)); wlan_psoc_set_qdf_dev(psoc, qdf_dev); soc->qdf_dev = qdf_dev; qdf_dev->drv = osdev; osdev->qdf_dev = soc->qdf_dev; osdev->netdev = dev; //下面是一些配置文件的解读和设置 ret = cfg_get_ini_file_name(target_type, &ini); soc->vow_config = cfg_get(psoc, CFG_OL_VOW_CONFIG); } ``` `wlan_objmgr_psoc_obj_create` 流程 ``` struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, WLAN_DEV_TYPE dev_type) { //分配空间 struct wlan_objmgr_psoc *psoc = qdf_mem_malloc(sizeof(*psoc)); } ```